﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLLCuentasWeb
{
    public class BLLCuenta:BLLGenerico
    {
        public BLLCuenta(CuentasDataContext contexto) : base(contexto) { }
        public BLLCuenta() : this(new CuentasDataContext()) { }

        public void CargarNueva(CW_Cuenta nuevaCuenta)
        {
            nuevaCuenta.NombreUsuario = Encriptador.Encriptar(nuevaCuenta.NombreUsuario);
            nuevaCuenta.Contraseña = Encriptador.Encriptar(nuevaCuenta.Contraseña);
            nuevaCuenta.CW_Dominio = Contexto.CW_Dominios.Where(d => d.IdDominio == nuevaCuenta.IdDominio).FirstOrDefault();

            Contexto.CW_Cuentas.InsertOnSubmit(nuevaCuenta);
        }

        public List<CW_Cuenta> TraerCuentas(string nombreUsuario, int idDominio)
        {
            List<CW_Cuenta> cuentas = new List<CW_Cuenta>();

            foreach (CW_Cuenta cuenta in Contexto.CW_Cuentas.ToList())
            {
                cuenta.NombreUsuario = Encriptador.Desencriptar(cuenta.NombreUsuario);
                cuenta.Contraseña = Encriptador.Desencriptar(cuenta.Contraseña);
                cuentas.Add(cuenta);
            }

            return (from c in cuentas
                    where (nombreUsuario == null || c.NombreUsuario.ToLower().Contains(nombreUsuario.ToLower())) &&  c.IdDominio == idDominio
                    select c).ToList();
        }

        public CW_Cuenta TraerCuenta(int idCuenta)
        {
            return Contexto.CW_Cuentas.Where(c => c.IdCuenta == idCuenta).FirstOrDefault();
        }

        public void ModificarCuenta(CW_Cuenta cuenta)
        {
            CW_Cuenta vieja = TraerCuenta(cuenta.IdCuenta);

            vieja.NombreUsuario = cuenta.NombreUsuario;
            vieja.Contraseña = cuenta.Contraseña;
            vieja.CW_Dominio = Contexto.CW_Dominios.Where(d => d.IdDominio == cuenta.IdDominio).FirstOrDefault();
            vieja.Comentarios = cuenta.Comentarios;
        }

        public void EliminarCuenta(CW_Cuenta cuenta)
        {
            CW_Cuenta pija = TraerCuenta(cuenta.IdCuenta);
            Contexto.CW_Cuentas.DeleteOnSubmit(pija);
        }
    }
}
